//每到达第i阶楼梯需要花费cost【i】体力，求出到达顶层所需的最小体力值,可以选择走一或两步
//使用动态规划
/*
1.dp数组的含义：到达第i阶的最小花费
2.递推：到达前两阶的最小值（取小的）加上到达该阶的最小
*/
#include <vector>
#include <algorithm>
using std::min;
using std::vector;
int minCostClimbingStairs(vector<int>& cost) {
    vector<int> dp(cost.size());
    dp[0]=cost[0];
    dp[1]=cost[1];
    for(int i=2;i<=cost.size()-1;i++){
        dp[i]=min(dp[i-1],dp[i-2])+cost[i]; //并不是直接选出走哪一步路，而是将到所有阶梯的最小花费值求出来
    }
    return min(dp[dp.size()-1],dp[dp.size()-2]);    //最后两阶梯再走不花费体力
}


